//
//  SynchronizedDemo.m
//  MultiperThreadTest02
//
//  Created by FelixYin on 2020/4/5.
//  Copyright © 2020 FelixYin. All rights reserved.
//

#import "SynchronizedDemo.h"


/*
 @synchronized 是对mutex中互斥锁的一个封装,中最好不要使用self，如果使用self的话没法控制当前锁是同一个锁对象，可以考虑使用
 类对象[self class]
 
 @synchronized(self){
 
 }
 
 */
@interface SynchronizedDemo ()


@end

@implementation SynchronizedDemo

- (instancetype)init
{
    self = [super init];
    if ([self class]) {
        
    }
    return self;
}

- (void)saveMoney{
    @synchronized([self class]){
     [super saveMoney];
    };
}


- (void)drawMoney{
    @synchronized([self class]){
     [super drawMoney];
    };
}

- (void)saleTicket{
    /*
     也可以不使用[self class]锁对象，
     可以单独创建一个锁对象，但要保证只创建一次
     
     */
    
//    @synchronized([self class]){
//     [super saleTicket];
//    };
    
    static NSObject *lock;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        lock = [[NSObject alloc] init];
    });
    
    @synchronized(lock){
     [super saleTicket];
    };
}

@end
